package com.hy;

import java.util.Stack;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:去重重复元素
 *
 * 给你一个字符串 s ，请你去除字符串中重复的字母，使得每个字母只出现一次。需保证 返回结果的字典序最小（要求不能打乱其他字符的相对位置）。
 * author: Mr.Du
 * Date: 2023/12/19
 * Time: 15:25
 */
public class RemoveDuplicateLetters {

    public String removeDuplicateLetters(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i < s.length();i++){
            char c = s.charAt(i);
            if(stack.contains(c)){
                continue;
            }
            // 当前小于栈顶元素，并且栈顶元素在当前元素后面出现过，那么就出栈
            while(!stack.isEmpty() && c < stack.peek() && s.indexOf(stack.peek(), i) != -1){
                stack.pop();
            }
            stack.push(c);
        }
        // 栈中元素就是结果
        StringBuffer sb = new StringBuffer();
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        return sb.reverse().toString();
    }
}
